package com.estore.service;

import com.estore.model.Product;

import java.util.*;

/**
 * 商品服务类，负责商品相关的业务逻辑
 * 目前使用内存Map模拟数据库
 */
public class ProductService {

    // 使用Map存储商品数据，key是商品ID，value是商品对象
    // 优点：通过ID查找商品时，时间复杂度是O(1)，非常高效
    private final Map<String, Product> productData = new HashMap<>();

    /**
     * 构造函数，初始化一些商品数据
     */
    public ProductService() {

        productData.put("p001", new Product("p001", "Java从入门到精通", 99.0, 100,javaBookTags));
        productData.put("p002", new Product("p002", "高性能MySQL", 128.5, 50,javaBookTags));
        productData.put("p003", new Product("p003", "颈椎康复指南", 45.0, 200,javaBookTags));
        productData.put("p004", new Product("p004", "生发秘籍", 88.0, 0,javaBookTags)); // 库存为0的商品
    }
    // 初始化默认商品数据的方法
    private void initDefaultData() {
        // ========== 改造部分开始 ==========
        // 示例 1：为 Java 书籍添加标签
        Set<String> javaBookTags = new HashSet<>();
        javaBookTags.add("编程");
        javaBookTags.add("畅销");
        // 重复添加“编程”验证唯一性
       ;
        productData.put(
                "p001",
                new Product("p001", "Java核心技术", 99.0, 100, javaBookTags)
        );
        // 打印 Set 大小（预期为 2，因为“编程”重复添加会被去重）
        System.out.println("Java 书籍标签 Set 大小: " + javaBookTags.size());
        // 示例 2：为手机添加标签
        Set<String> phoneTags = new HashSet<>();
        phoneTags.add("热门");
        phoneTags.add("新品");
        // 重复添加“热门”验证唯一性

        productData.put(
                "p002",
                new Product("p002", "旗舰手机", 2999.0, 50, phoneTags)
        );
        System.out.println("手机标签 Set 大小: " + phoneTags.size());
        // 示例 3：添加一个无标签的商品（验证构造函数默认空 Set）
        productData.put(
                "p003",
                new Product("p003", "普通耳机", 199.0, 100,javaBookTags)
        );
        // ========== 改造部分结束 ==========
    }
    /**
     * 获取所有商品列表
     * @return 商品列表
     */
    public List<Product> getAllProducts() {
        // 从Map的值集合创建一个新的ArrayList并返回
        return new ArrayList<>(productData.values());
    }

    /**
     * 根据ID查找商品
     * @param id 商品ID
     * @return 找到的商品对象，如果不存在则返回null
     */
    public Product findProductById(String id) {
        return productData.get(id);
    }
}